/**
给你一个字符串 S、一个字符串 T 。请你设计一种算法，可以在 O(n) 的时间复杂度内，从字符串 S 里面找出：包含 T 所有字符的最小子串。
示例：
输入：S = "ADOBECODEBANC", T = "ABC"
输出："BANC"
提示：
如果 S 中不存这样的子串，则返回空字符串 ""。
如果 S 中存在这样的子串，我们保证它是唯一的答案。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/minimum-window-substring
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func minWindow(s string, t string) string {
   counter := make([]int,256)
   for  i := 0;i < len(t); i++{
       counter[int(t[i])]++
   }
   c, j,min,left  := len(t), 0,len(s)+1,0
   for i := 0;i < len(s); i++{
       if counter[int(s[i])] > 0{
           c --
       }
       counter[int(s[i])]--
       for c == 0{
           if min  >  i - j + 1{
              min = i - j + 1
              left = j
           }   
           counter[int(s[j])]++
           if counter[int(s[j])] > 0{
                c ++
           } 
           j++   
       }
   }
   if min == len(s) + 1{
       return ""
   }
   return s[left:left+min]
}